package utils

import (
	"encoding/json"
	"os"
	"zinx-study/ziface"
)

// GlobalObj 全局配置
// 存储所有有关Zinx框架的全局参数，供其他模块使用
// 让用户根据zinx.json来配置Zinx
type GlobalObj struct {
	TcpServer ziface.IServer //当前Zinx的全局Server对象
	Host      string         //当前服务器主机IP
	TcpPort   int            //当前服务器主机监听端口号
	Name      string         //当前服务器名称
	Version   string         //当前Zinx版本号

	MaxPacketSize    uint32 //单个数据包的最大值
	MaxConn          int    //当前服务器主机允许的最大链接个数
	WorkerPoolSize   uint32 //业务工作Worker池的数量
	MaxWorkerTaskLen uint32 //业务工作Worker对应负责的任务队列最大任务存储数量

	ConfFilePath string
}

// Load 读取配置文件
func (g *GlobalObj) Load() {
	data, err := os.ReadFile(g.ConfFilePath)
	if err != nil {
		panic(err)
	}
	err = json.Unmarshal(data, &g)
	if err != nil {
		panic(err)
	}
}

var GObj *GlobalObj

func init() {
	//初始化GlobalObject变量，设置一些默认值
	GObj = &GlobalObj{
		Name:             "ZinxServerApp",
		Version:          "V0.4",
		TcpPort:          7777,
		Host:             "0.0.0.0",
		MaxConn:          12000,
		MaxPacketSize:    4096,
		ConfFilePath:     "conf/zinx.json",
		WorkerPoolSize:   10,
		MaxWorkerTaskLen: 1024,
	}

	//从配置文件中加载一些用户配置的参数
	GObj.Load()
}
